home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_556 / scheme2c / scheme-src.lzh / scrt / cio.c < prev    next >
C/C++ Source or Header  |  1991-10-11  |  5KB  |  182 lines

  1. /* SCHEME->C */
  2.  
  3. /*              Copyright 1989 Digital Equipment Corporation
  4.  *                         All Rights Reserved
  5.  *
  6.  * Permission to use, copy, and modify this software and its documentation is
  7.  * hereby granted only under the following terms and conditions.  Both the
  8.  * above copyright notice and this permission notice must appear in all copies
  9.  * of the software, derivative works or modified versions, and any portions
  10.  * thereof, and both notices must appear in supporting documentation.
  11.  *
  12.  * Users of this software agree to the terms and conditions set forth herein,
  13.  * and hereby grant back to Digital a non-exclusive, unrestricted, royalty-free
  14.  * right and license under any changes, enhancements or extensions made to the
  15.  * core functions of the software, including but not limited to those affording
  16.  * compatibility with other hardware or software environments, but excluding
  17.  * applications which incorporate this software.  Users further agree to use
  18.  * their best efforts to return to Digital any such changes, enhancements or
  19.  * extensions that they make and inform Digital of noteworthy uses of this
  20.  * software.  Correspondence should be provided to Digital at:
  21.  * 
  22.  *                       Director of Licensing
  23.  *                       Western Research Laboratory
  24.  *                       Digital Equipment Corporation
  25.  *                       100 Hamilton Avenue
  26.  *                       Palo Alto, California  94301  
  27.  * 
  28.  * This software may be distributed (but not offered for sale or transferred
  29.  * for compensation) to third parties, provided such third parties agree to
  30.  * abide by the terms and conditions of this notice.  
  31.  * 
  32.  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
  33.  * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
  34.  * MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
  35.  * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  36.  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  37.  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
  38.  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  39.  * SOFTWARE.
  40. */
  41.  
  42. /* This module supplies functions to access C Library I/O macros. */
  43.  
  44. #include <stdio.h>
  45. #ifndef    AMIGA
  46. #include <sys/ioctl.h>
  47. #include <sys/time.h>
  48. #else
  49. #include <ios1.h>
  50. #define _cnt _rcnt        /* Map buffer checks to read buffer only */
  51. #include <exec/types.h>
  52. #include <proto/dos.h>
  53. #endif
  54.  
  55. #include "objects.h"
  56.  
  57. /* This really does not need to be dependant on ISC386IX, just the lack of */
  58. /* a rename function.  This is just a dirty hack. */
  59. #ifdef ISC386IX
  60. #include <stropts.h>
  61. #include <poll.h>
  62. int rename(old, new) char *old, *new;
  63. {
  64.   if (link(old, new) == 0 && unlink(old) == 0)
  65.     return 0;
  66.   return -1;
  67. }
  68. #endif
  69.  
  70. int  sc_libc_eof = EOF;
  71.  
  72. /*  feof(stream)  */
  73.  
  74. int sc_feof( stream )
  75.     FILE *stream;
  76. {
  77.     return( feof( stream ) );
  78. }
  79.  
  80. /*  ferror(stream)  */
  81.  
  82. int sc_ferror( stream )
  83.     FILE *stream;
  84. {
  85.     return( ferror( stream ) );
  86. }
  87.  
  88. /*  clearerr(stream)  */
  89.  
  90. sc_clearerr( stream )
  91.     FILE *stream;
  92. {
  93.     clearerr( stream );
  94. }
  95.  
  96. /*  fileno(stream)  */
  97.  
  98. int sc_fileno( stream )
  99.     FILE *stream;
  100. {
  101.     return( fileno( stream ) );
  102. }
  103.  
  104. /* The following function is a boolean which returns 1 when there are
  105.    input characters ready, and 0 when none are available.
  106. */
  107.  
  108. /* The changes here are probably generic Sys5 changes, but what the heck */
  109. int sc_inputchars( stream )
  110.     FILE *stream;
  111. {
  112.     int  readfds, nfound;
  113. #ifdef    AMIGA
  114.     extern struct UFB _ufbs[];
  115. #else
  116. #ifndef ISC386IX
  117.     struct  timeval  timeout;
  118. #else
  119.     struct pollfd pollfd;
  120. #endif    /* ISC386IX */
  121. #endif    /* AMIGA */
  122.     
  123.     if  (((stream)->_cnt) <= 0)  {
  124. #ifdef    AMIGA
  125.        nfound = (!IsInteractive(_ufbs[fileno(stream)].ufbfh)) ? 1
  126.             : WaitForChar(_ufbs[fileno(stream)].ufbfh, 0);
  127. #else
  128. #ifndef ISC386IX
  129.        readfds = 1<<(fileno( stream ));
  130.        timeout.tv_sec = 0;
  131.        timeout.tv_usec = 0;
  132.        nfound = select( fileno( stream )+1, &readfds, 0, 0, &timeout );
  133. #else
  134.        pollfd.fd = fileno( stream );
  135.        pollfd.events = POLLIN;
  136.        nfound = poll(&pollfd, 1, 0);
  137. #endif    /* ISC386IX */
  138. #endif    /* AMIGA */
  139.        if  (nfound == 0)  return( 0 );
  140.     }
  141.     return( 1 );
  142. }
  143.  
  144. /* The following boolean returns 1 if there are characters buffered for the
  145.    stream, 0 otherwise.
  146. */
  147.  
  148. int  sc_bufferedchars( stream )
  149.     FILE *stream;
  150. {
  151.     if  (((stream)->_cnt) > 0)
  152.        return( 1 );
  153.     else
  154.        return( 0 );
  155. }
  156.  
  157. #ifdef    AMIGA
  158. /* Sigh - lattice doesn't have an fflush function or any select, so we
  159.  * so we provide them... */
  160. #undef    fflush
  161. extern struct UFB _ufbs[];
  162.  
  163. int select(nfds, readfds, writefds, execptfds, timeout)
  164.     int nfds, *readfds, *writefds, *execptfds, timeout;
  165.     {
  166.     int file = 0, fd = *readfds ;
  167.     
  168.     while (fd) {        /* Get a real file number from the bit*/
  169.         fd = fd >> 1 ;
  170.         file += 1 ;
  171.         }
  172.     return (!IsInteractive(_ufbs[file].ufbfh)) ? 1
  173.                 : WaitForChar(_ufbs[file].ufbfh, 0) ? 0 : 1 ;
  174.     }
  175.  
  176.  
  177. int
  178. fflush(fp) FILE *fp; {
  179.     return _flsbf(-1, fp) ;
  180.     }
  181. #endif
  182.